package com.agile.leetcode.jvm.valuepassed;

import lombok.Data;

/**
 * 函数参数传递比如类的对象时实际传递的都是引用，可以理解成指针，在函数内部单纯的赋值交换形参的引用在java中是没有意义的操作，
 * 因为这种交换只会存在与这个函数自身的作用范围内，所以函数执行完毕函数外部的引用还是正确的指向了原有的对象。
 *
 * @author CZK
 * @date 2022/3/11 17:00
 */
public class ValuePassed {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setName("czk");
        Person p2 = new Person();
        p2.setName("czj");
        // 交换
        swap(p1, p2);
        System.out.println("p1的名字= " + p1.getName());
        System.out.println("p2的名字= " + p2.getName());
    }

    public static void swap(Person p1, Person p2) {
        Person p ;
        p = p1;
        p1 = p2;
        p2 = p;
        System.out.println("p1的名字= " + p1.getName());
        System.out.println("p2的名字= " + p2.getName());
    }

    @Data
    private static class Person {
        private String name;
    }
}
